# coding=utf-8
import re

"""
该文件用于提取车牌，车牌的一般格式:
第一位:各省、直辖市、自治区的简称
第二位:各地级市、地区、自治州、盟字母代码
序号编码规则:
1、每一位使用阿拉伯数字
2、序号的每一位可单独使用英文字母，26个英文字母O和I不能使用
3、序号中允许出现2位英文字母，26个英文字母O和I不能使用

至今全国省级行政区包括23个省、5个自治区、4个直辖市、2个特别行政区，一共34个，其中
省级行政区23个，包括黑龙江、吉林、辽宁、河北、山西、江苏、浙江、安徽、福建、江西、山东、河南、湖北、湖南、广东、海南、四川、贵州、云南、陕西、甘肃、青海、台湾省，
5个自治区包括内蒙古、广西、西藏、宁夏、新疆。
4个直辖市包括北京、天津、上海、重庆，
2个特区为香港和澳门

黑龙江:黑
吉林:吉
辽宁:辽
河北:冀
河南:豫
山东:鲁
山西:晋
陕西:陕
甘肃:甘
青海:青
江苏:苏
安徽:皖
四川:川
湖北:鄂
湖南:湘
江西:赣
浙江:浙
贵州:黔
福建:闽
云南:滇
台湾:台
广东:粤
广西:桂
海南:琼
新疆:新
西藏:藏
内蒙古:蒙
宁夏:宁
北京:京
天津:津
上海:户
重庆:渝
香港:港
澳门:澳

新能源车牌：6位 粤VD12345
挂车：京AF023挂
使领馆车牌：224578使、沪22478领
港澳入出境车牌号：粤ZF023港、粤ZF023澳（香港和澳门本地车牌略）
教练车牌：京AF023学
警车车牌：京A0006警
应急救援车：京X2345应急
普通摩托车：京AA0062（后号牌，2014年取消了前号牌）
使领馆摩托车：224578使、沪领22478
教练摩托车：京AA006学
警用摩托车：京A0006警
"""
import re

province2simple = {
    "黑龙江省": "黑",
    "吉林省": "吉",
    "辽宁省": "辽",
    "河北省": "冀",
    "河南省": "豫",
    "山东省": "鲁",
    "山西省": "晋",
    "陕西省": "陕",
    "甘肃省": "甘",
    "青海省": "青",
    "江苏省": "苏",
    "安徽省": "皖",
    "四川省": "川",
    "湖北省": "鄂",
    "湖南省": "湘",
    "江西省": "赣",
    "浙江省": "浙",
    "贵州省": "贵",  # 黔，车牌号是贵
    "福建省": "闽",
    "云南省": "云",  # 滇，车牌号是云
    "台湾省": "台",
    "广东省": "粤",
    "广西省": "桂",
    "海南省": "琼",
    "新疆维吾尔族自治区": "新",
    "西藏自治区": "藏",
    "内蒙古自治区": "蒙",
    "宁夏回族自治区": "宁",
    "北京市": "京",
    "天津市": "津",
    "上海市": "沪",
    "重庆市": "渝",
    "香港": "港",
    "澳门": "澳",
}

simple2province = {k: j for j, k in province2simple.items()}

# province = "京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁台琼"
pattern1 = "[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁台琼]{1}[A-Z]{1}[-，, 、.]*[0-9A-Z]{6}"  # 新能源车
pattern2 = "[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁台琼]{1}[A-Z]{1}[-，, 、.]*[0-9A-Z]{4}[0-9A-Z港澳挂领学警]{1}(?!\d)"
  


def extract_plate(text):
    res = []
    items1 = re.finditer(pattern1, text)
    if items1:
        for item in items1:
            start = item.start()
            end = item.end()
            ent = text[start:end]
            text = re.sub(ent, "@"*len(ent), text)
            res.append(ent)
    items2 = re.finditer(pattern2, text)
    if items1:
        for item in items2:
            start = item.start()
            end = item.end()
            ent = text[start:end]
            res.append(text)
    res = list(set(ent))
    return res


if __name__ == '__main__':
    text = "车牌：粤A1002挂"
    text = "我把我的货车(车牌号码是:粤BZ52Y0)"
    print(extract_plate(text))
